package com.yangyang.notepad;

import android.content.Context;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Environment;
import android.widget.Toast;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.nio.channels.FileChannel;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class DatabaseBackupHelper {

    // 导出数据库到外部存储
    public boolean exportDatabase(Context context, String dbName) {
        try {
            // 源数据库路径
            File dbFile = context.getDatabasePath(dbName);
            if (!dbFile.exists()) {
                Toast.makeText(context, "数据库不存在，导出失败", Toast.LENGTH_SHORT).show();
                return false;
            }

            // 目标导出路径（公共下载目录）
            File exportDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "notepad_backups");
            if (!exportDir.exists()) exportDir.mkdirs();

            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
            File exportFile = new File(exportDir, dbName + "_backup_" + sdf.format(new Date()) + ".db");

            // 执行文件拷贝
            FileChannel src = new FileInputStream(dbFile).getChannel();
            FileChannel dst = new FileOutputStream(exportFile).getChannel();
            dst.transferFrom(src, 0, src.size());
            src.close();
            dst.close();

            // 通知系统刷新媒体库
            MediaScannerConnection.scanFile(
                    context,
                    new String[]{exportFile.getAbsolutePath()},
                    null,
                    null
            );

            Toast.makeText(context, "数据库导出成功", Toast.LENGTH_SHORT).show();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(context, "数据库导出失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
            return false;
        }
    }


    // 从外部文件导入数据库
    public boolean importDatabase(Context context, Uri importUri, String dbName) {
        try {
            // 获取输入流（支持 ContentResolver 处理各种 Uri）
            InputStream inputStream = context.getContentResolver().openInputStream(importUri);
            if (inputStream == null) {
                Toast.makeText(context, "无法打开导入文件", Toast.LENGTH_SHORT).show();
                return false;
            }

            // 目标数据库路径
            File dbFile = context.getDatabasePath(dbName);
            if (dbFile.exists()) dbFile.delete(); // 覆盖原有数据库

            // 创建父目录（如果不存在）
            File parent = dbFile.getParentFile();
            if (!parent.exists()) parent.mkdirs();

            // 写入数据库文件
            FileOutputStream outputStream = new FileOutputStream(dbFile);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = inputStream.read(buffer)) > 0) {
                outputStream.write(buffer, 0, length);
            }
            outputStream.flush();
            outputStream.close();
            inputStream.close();

            Toast.makeText(context, "数据库导入成功", Toast.LENGTH_SHORT).show();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(context, "数据库导入失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
            return false;
        }
    }
}
